import 'package:flutter/material.dart';
import 'package:web_socket_channel/io.dart';

class Test14 extends StatefulWidget{
    _TestState createState() => _TestState();
}

class _TestState extends State<Test14> {

    TextEditingController _controller = TextEditingController();
    IOWebSocketChannel channel;
    String _text = "";

    @override
    void initState() {
        channel = IOWebSocketChannel.connect('ws://echo.websocket.org');
        super.initState();
    }

    @override
    Widget build(BuildContext context) {
        return new Scaffold(
            appBar: AppBar(
                title: Text("socket连接"),
                centerTitle: true,
            ),
            body: Container(
                padding: EdgeInsets.all(20.0),
                child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                        Form(
                            child: TextFormField(
                                controller: _controller,
                                decoration: InputDecoration(
                                    labelText: '发送一条信息'
                                ),
                            ),
                        ),
                        StreamBuilder(
                            stream: channel.stream,
                            builder: (context,snapshot){
                                print(snapshot);
                                if(snapshot.hasError){
                                    _text = "网络不通";
                                }else if(snapshot.hasData){
                                    _text = snapshot.data;
                                }
                                return Padding(
                                    padding: EdgeInsets.symmetric(vertical: 24.0),
                                    child: Text(_text),
                                );
                            },
                        )
                    ],
                ),
            ),
            floatingActionButton: FloatingActionButton(
                onPressed: _sendMessage,
                tooltip: '发送消息',
                child: Icon(Icons.send),
            ),
        );
    }

    void _sendMessage(){
        if(_controller.text.isNotEmpty){
            channel.sink.add(_controller.text);
        }
    }

    @override
    void dispose() {
        channel.sink.close();
        super.dispose();
    }

}




// import 'package:flutter/material.dart';
// import 'dart:io';
// import 'dart:async';

// class Test14 extends StatefulWidget{
//     _TestState createState() => _TestState();
// }

// class _TestState extends State<Test14> {

//     TextEditingController _controller = TextEditingController();
//     Socket socket;
//     String _text = "";

//     @override
//     void initState() {
//         Socket.connect('ws://echo.websocket.org', null).then((Socket sock){
//             socket = sock;
//             socket.listen(dataHandler,onError: errorHandler,onDone: doneHandler,cancelOnError: false);
//         }).catchError((e){
//             print(e);
//         });
//         // socket.write('33333333333');
//         super.initState();
//     }

//     void dataHandler(data){
//         print('getting data-----------------------------');
//         print(String.fromCharCodes(data).trim());
//     }

//     void errorHandler(error,StackTrace trace){
//         print(error);
//     }

//     void doneHandler(){
//         socket.destroy();
//     }

//     @override
//     Widget build(BuildContext context) {
//         return new Scaffold(
//             appBar: AppBar(
//                 title: Text("socket连接"),
//                 centerTitle: true,
//             ),
//             body: Container(
//                 padding: EdgeInsets.all(20.0),
//                 child: Column(
//                     crossAxisAlignment: CrossAxisAlignment.start,
//                     children: <Widget>[
//                         Form(
//                             child: TextFormField(
//                                 controller: _controller,
//                                 decoration: InputDecoration(
//                                     labelText: '发送一条信息'
//                                 ),
//                             ),
//                         ),
//                     ],
//                 ),
//             ),
//             floatingActionButton: FloatingActionButton(
//                 onPressed: (){socket.write('33333333333');},
//                 tooltip: '发送消息',
//                 child: Icon(Icons.send),
//             ),
//         );
//     }
// }

